--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / auth / AuthPage.vue
Displaying Raw • Download
meshchatx/src/frontend/components/auth/AuthPage.vue master (b89dc9e6) Text, 9.14 KB
T8b949e<!-- SPDX-License-Identifier: 0BSD -->
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"h-dvh min-h-0 w-full flex flex-col bg-slate-50 dark:bg-zinc-950"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3demoModeTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"relative z-100 shrink-0 bg-amber-600 text-white px-4 py-2 text-center text-sm font-medium shadow-md border-b border-amber-700/80"
Te6edf3roleTff7b72=Ta5d6ff"status"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.demo_mode_active"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-h-0 flex items-center justify-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full max-w-md p-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-2xl shadow-lg border border-gray-200 dark:border-zinc-800 p-8"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-center mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-16 h-16 mx-auto mb-4 rounded-2xl overflow-hidden bg-white/70 dark:bg-white/10 border border-gray-200 dark:border-zinc-700 shadow-inner flex items-center justify-center"
Tb4b4b4>
Tb4b4b4<Tff7b72img Te6edf3classTff7b72=Ta5d6ff"w-16 h-16 object-contain p-2" Tb4b4b4:Te6edf3srcTff7b72=Ta5d6ff"Te6edf3logoUrlTa5d6ff" Te6edf3altTff7b72=Ta5d6ff"" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h1 Te6edf3classTff7b72=Ta5d6ff"text-2xl font-bold text-gray-900 dark:text-zinc-100 mb-2"Tb4b4b4>
Tff7b72{{ Te6edf3isSetup Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"auth.setup_title"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"auth.login_title"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h1Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-600 dark:text-zinc-400"Tb4b4b4>
Tff7b72{{ Te6edf3isSetup Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"auth.setup_subtitle"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"auth.login_subtitle"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72p
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3authPageHintTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"mt-3 text-xs text-gray-600 dark:text-zinc-400 whitespace-pre-line"
Tb4b4b4>
Tff7b72{{ Te6edf3authPageHint Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72form Te6edf3classTff7b72=Ta5d6ff"space-y-6" Tb4b4b4@Te6edf3submitTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3handleSubmitTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3forTff7b72=Ta5d6ff"password"
Te6edf3classTff7b72=Ta5d6ff"block text-sm font-medium text-gray-700 dark:text-zinc-300 mb-2"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"auth.password_label"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3idTff7b72=Ta5d6ff"password"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3passwordTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"password"
Te6edf3required
Tb4b4b4:Te6edf3minlengthTff7b72=Ta5d6ff"Te6edf3isSetup Tff7b72? T79c0ff8 Tff7b72: T79c0ff1Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full px-4 py-2 border border-gray-300 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-800 text-gray-900 dark:text-zinc-100 focus:outline-hidden focus:ring-2 focus:ring-blue-500 focus:border-transparent"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'auth.password_placeholder'Tb4b4b4)Ta5d6ff"
Te6edf3autocompleteTff7b72=Ta5d6ff"current-password"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isSetupTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"mt-2 text-xs text-gray-500 dark:text-zinc-500"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"auth.password_min_length"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isSetupTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72label
Te6edf3forTff7b72=Ta5d6ff"confirmPassword"
Te6edf3classTff7b72=Ta5d6ff"block text-sm font-medium text-gray-700 dark:text-zinc-300 mb-2"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"auth.confirm_password_label"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3idTff7b72=Ta5d6ff"confirmPassword"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3confirmPasswordTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"password"
Te6edf3required
Te6edf3minlengthTff7b72=Ta5d6ff"8"
Te6edf3classTff7b72=Ta5d6ff"w-full px-4 py-2 border border-gray-300 dark:border-zinc-700 rounded-lg bg-white dark:bg-zinc-800 text-gray-900 dark:text-zinc-100 focus:outline-hidden focus:ring-2 focus:ring-blue-500 focus:border-transparent"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'auth.confirm_password_placeholder'Tb4b4b4)Ta5d6ff"
Te6edf3autocompleteTff7b72=Ta5d6ff"new-password"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3altchaEnabledTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"min-h-[52px]"Tb4b4b4>
Tb4b4b4<Tff7b72altcha-widget
Te6edf3refTff7b72=Ta5d6ff"altchaWidget"
Tb4b4b4:Te6edf3challengeTff7b72=Ta5d6ff"Te6edf3altchaChallengeUrlTa5d6ff"
Te6edf3autoTff7b72=Ta5d6ff"onsubmit"
Te6edf3nameTff7b72=Ta5d6ff"altcha"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72altcha-widgetTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3errorTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg"
Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"text-sm text-red-800 dark:text-red-200"Tb4b4b4>Tff7b72{{ Te6edf3error Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"submit"
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Te6edf3isLoading Tff7b72|| Tb4b4b4(Te6edf3isSetup Tff7b72&& Te6edf3password Tff7b72!== Te6edf3confirmPasswordTb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full py-2.5 px-4 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 disabled:cursor-not-allowed text-white font-semibold rounded-lg transition-colors"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isLoadingTa5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"auth.processing"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-elseTb4b4b4>Tff7b72{{ Te6edf3isSetup Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"auth.set_password"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"auth.login"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72formTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Ta5d6ff"altcha"Tb4b4b4;
Tff7b72import Te6edf3logoUrl Tff7b72from Ta5d6ff"../../assets/images/logo.png"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"AuthPage"Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3logoUrlTb4b4b4,
Te6edf3passwordTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3confirmPasswordTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3errorTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3isLoadingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isSetupTff7b72: Tff7b72falseTb4b4b4,
Te6edf3altchaEnabledTff7b72: Tff7b72falseTb4b4b4,
Te6edf3demoModeTff7b72: Tff7b72falseTb4b4b4,
Te6edf3authPageHintTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3altchaChallengeUrlTff7b72: Ta5d6ff"/api/v1/auth/altcha/challenge"Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3checkAuthStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Tff7b72async Te6edf3checkAuthStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/auth/status"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3status Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3statusTb4b4b4.Te6edf3auth_enabledTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"/"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3statusTb4b4b4.Te6edf3authenticatedTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"/"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3isSetup Tff7b72= Tff7b72!Te6edf3statusTb4b4b4.Te6edf3password_setTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3altchaEnabled Tff7b72= Te6edf3statusTb4b4b4.Te6edf3altcha_enabled Tff7b72=== Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3demoMode Tff7b72= Te6edf3statusTb4b4b4.Te6edf3demo_mode Tff7b72=== Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3hint Tff7b72= Te6edf3statusTb4b4b4.Te6edf3auth_page_hintTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3authPageHint Tff7b72= Tff7b72typeof Te6edf3hint Tff7b72=== Ta5d6ff"string" Tff7b72? Te6edf3hint Tff7b72: Ta5d6ff""Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to check auth status:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3error Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"auth.status_check_failed"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3readAltchaPayloadTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3widget Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$refsTb4b4b4.Te6edf3altchaWidgetTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3widgetTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3widgetTb4b4b4.Te6edf3getPayload Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3widgetTb4b4b4.Te6edf3getPayloadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3widgetTb4b4b4.Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3widgetTb4b4b4.Te6edf3valueTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3handleSubmitTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3error Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isSetupTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3password Tff7b72!== Tff7b72thisTb4b4b4.Te6edf3confirmPasswordTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3error Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"auth.passwords_mismatch"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3passwordTb4b4b4.Te6edf3length Tff7b72< T79c0ff8Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3error Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"auth.password_min_length"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3isLoading Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3endpoint Tff7b72= Tff7b72thisTb4b4b4.Te6edf3isSetup Tff7b72? Ta5d6ff"/api/v1/auth/setup" Tff7b72: Ta5d6ff"/api/v1/auth/login"Tb4b4b4;
Tff7b72const Te6edf3body Tff7b72= Tb4b4b4{ Te6edf3passwordTff7b72: Tff7b72thisTb4b4b4.Te6edf3password Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3altchaEnabledTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3altchaPayload Tff7b72= Tff7b72thisTb4b4b4.Te6edf3readAltchaPayloadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3altchaPayloadTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3error Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"auth.altcha_required"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isLoading Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3bodyTb4b4b4.Te6edf3altcha Tff7b72= Te6edf3altchaPayloadTb4b4b4;
Tb4b4b4}
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Te6edf3endpointTb4b4b4, Te6edf3bodyTb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3locationTb4b4b4.Te6edf3reloadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3error Tff7b72= Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3error Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"auth.failed"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3password Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3confirmPassword Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isLoading Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────